package com.lyy.Proxy;

import lombok.SneakyThrows;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author Liangyaoyun
 */

public class Myjdkproxy implements InvocationHandler {
    private Object customer;

    public Object newProxy(Object customer) {
        this.customer = customer;
        return Proxy.newProxyInstance(
                // JDK动态代理需要了解客户的类加载器
                customer.getClass().getClassLoader(),
                // JDK动态代理需要了解客户的接口们
                customer.getClass().getInterfaces(),
                // JDK动态代理需要了解需要调用哪个类中的任务清单方法
                this);
    }
    @Override
    @SneakyThrows
    public Object invoke(Object proxy, Method method, Object[] args) {
        // 前置通知
        System.out.println("鉴权..");
        // 调用业务方法: 需要指定客户以及业务方法参数
        Object result = method.invoke(customer, args);
        // 后置通知
        System.out.println("日志..");
        // 返回业务方法的返回值
        return result;
    }
}

